package com.jiukuaidao.zhulin.expand.baidu.location;

import com.baidu.location.BDLocationListener;
import com.baidu.location.LocationClient;
import com.baidu.location.LocationClientOption;
import com.jiukuaidao.library.Config;

/**
 * Author : BinarySatan
 * Date : 2016/5/24
 * Description :
 */
public class Location {

    private LocationClient mLocationClient;

    private BDLocationListener mListener = new LocationListener();


    private Location() {
        initLocation();
    }

    static class INSTANCE {
        static Location instance = new Location();
    }

    public static Location getInstance() {
        return INSTANCE.instance;
    }


    /**
     * 若需要返回的定位结果里包含地址信息，请保证网络连接。因为GPS是本地获取的定位位置，在某些情况下有可能不带地址信息
     * 定位SDK可以返回bd09、bd09ll、gcj02三种类型坐标，若需要将定位点的位置通过百度Android地图 SDK进行地图展示，请返回bd09ll，将无偏差的叠加在百度地图上
     * <p/>
     * 有的移动设备锁屏后为了省电会自动关闭网络连接，此时网络定位模式的定位失效。此外，锁屏后移动设备若进入cpu休眠，
     * 定时定位功能也失效。若您需要实现在cpu休眠状态仍需定时定位，可以用alarmManager 实现1个cpu可叫醒的timer，定时请求定位。
     */
    private void initLocation() {
        mLocationClient = new LocationClient(Config.mContext);

        mLocationClient.registerLocationListener(mListener);

        LocationClientOption option = new LocationClientOption();
        option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy);//可选，默认高精度，设置定位模式，高精度，低功耗，仅设备
        option.setCoorType("bd09ll");//可选，默认gcj02，设置返回的定位结果坐标系
//        option.setScanSpan(span);//可选，默认0，即仅定位一次，设置发起定位请求的间隔需要大于等于1000ms才是有效的
        option.setIsNeedAddress(true);//可选，设置是否需要地址信息，默认不需要
        option.setOpenGps(true);//可选，默认false,设置是否使用gps
//        option.setLocationNotify(true);//可选，默认false，设置是否当gps有效时按照1S1次频率输出GPS结果
//        option.setIsNeedLocationDescribe(true);//可选，默认false，设置是否需要位置语义化结果，可以在BDLocation.getLocationDescribe里得到，结果类似于“在北京天安门附近”
//        option.setIsNeedLocationPoiList(true);//可选，默认false，设置是否需要POI结果，可以在BDLocation.getPoiList里得到
        option.setIgnoreKillProcess(false);//可选，默认true，定位SDK内部是一个SERVICE，并放到了独立进程，设置是否在stop的时候杀死这个进程，默认不杀死
//        option.SetIgnoreCacheException(false);//可选，默认false，设置是否收集CRASH信息，默认收集
//        option.setEnableSimulateGps(false);//可选，默认false，设置是否需要过滤gps仿真结果，默认需要
        mLocationClient.setLocOption(option);
    }


    public void start() {
        mLocationClient.start();
    }

    public void stop() {
        mLocationClient.stop();
    }

}
